import axios from 'axios'
import store from '@/store'
import { Message } from 'element-ui'
import router from '@/router'
const service = axios.create({
  baseURL: '/api',
  timeout: 5000
})
// 抽离函数：判断token是否超时
const timeoutlimit = 3600
const isCheckTimeout = () => {
  const time2 = Date.now()
  const timestamp = (time2 - store.getters.likedeTime) / 1000
  return timestamp > timeoutlimit
}

service.interceptors.request.use(config => {
  // do sth ==> 具有公用性的字段在这添加
  if (store.getters.token) {
    if (isCheckTimeout()) { // 超时了，执行登出操作：1’清空token和userinfo；2‘跳转到登录页；3’抛出错误；4：响应拦截器err回调中加入Message提示用户Token过期
      store.dispatch('user/logout')
      router.push('/login')
      return Promise.reject(new Error('token超时，请重新登陆'))
    }
    config.headers.Authorization = `${store.getters.token}`
  }
  return config
}, err => {
  return Promise.reject(err)
})

// 响应拦截器
service.interceptors.response.use(response => {
  return response
}, err => {
  // 被动处理 status为401时
  // console.log(err)
  if (err && err.response && err.response.status === 401) {
    store.dispatch('user/logout')
    router.push('/login')
    Message.error(err.response.data.msg || 'token时效，请重新登陆')
  } else {
    // 这里的提示来自于 业务逻辑不正常
    // request token超时
    Message.error(err.msg || '后端服务器报错') // 提示错误信息
  }
  return Promise.reject(err)
})
export default service
